package 栈队列与哈希表;

import java.util.Stack;

/**
 * 分析与解答
 * 要求用两个栈来模拟队列，假设使用栈A与栈B模拟队列Q，A为插入栈，B为弹出栈，
 * 以实现队列Q。再假设栈A和栈B都为空，可以认为栈A提供入队列的功能，
 * 栈B提供出队列的功能。要入队列，入栈A即可，而出队列则需要分两种情况考虑：
 * 1）如果栈B不为空，则直接弹出栈B的数据。
 * 2）如果栈B为空，则依次弹出栈A的数据，放入栈B中，再弹出栈B的数据。
 */
public class F如何用两个栈模拟队列操作<T> {

    private Stack<T> a = new Stack<>();
    private Stack<T> b = new Stack<>();

    public void push(T data) {
        a.push(data);
    }

    public T pop() {
        if (b.empty()) {
            while (!a.empty()) {
                b.push(a.peek());
                a.pop();
            }
        }
        T first = b.peek();
        b.pop();
        return first;
    }

    public static void main(String[] args) {
        F如何用两个栈模拟队列操作<Integer> stack = new F如何用两个栈模拟队列操作<>();
        stack.push(1);
        stack.push(2);
        System.out.println("队列首元素为：" + stack.pop());
        System.out.println("队列首元素为：" + stack.pop());
    }
}
